package com.cloud.api.config;

import com.cloud.api.annotation.SumOfDigits;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

import java.math.BigDecimal;

/**
 * @author 杨斌
 * 2024-08-28/8/2024
 */
public class SumOfDigitsValidator implements ConstraintValidator<SumOfDigits, BigDecimal> {
    private int maxDigits;

    @Override
    public void initialize(SumOfDigits constraintAnnotation) {
        this.maxDigits = constraintAnnotation.value();
    }

    @Override
    public boolean isValid(BigDecimal value, ConstraintValidatorContext context) {
        if (value == null) {
            return true;  // 允许为空
        }

        String stringValue = value.toPlainString();
        String[] parts = stringValue.split("\\.");

        if (parts.length == 1) {
            // 仅有整数部分
            return parts[0].length() <= maxDigits;
        } else if (parts.length == 2) {
            // 整数部分和小数部分都存在
            int integerDigits = parts[0].length();
            int fractionDigits = parts[1].length();
            return (integerDigits + fractionDigits) <= maxDigits;
        } else {
            // 不符合规则的情况
            return false;
        }
    }
}




